package tutorial.main.control.location;

import java.util.List;

import com.google.android.maps.GeoPoint;

import android.app.Activity;
import android.content.Context;
import android.location.*;
import android.os.Bundle;

public class LocationFinder {

	private LocationManager locManager;
	private Location loc;
	// Mi objeto que maneja los cambios en los eventos
	// Es el que se suscribe para recibir los updates de la localizacion
	private LocationListener locListener;

		
	public LocationFinder(Activity context)
	{
		//  saber los proveedores disponibles en el dispositivo
		locManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
	}
	
	public LocationFinder(LocationManager manager)
	{
		//  saber los proveedores disponibles en el dispositivo
		locManager = manager;
	}	
	
	public void startListening(LocationListener locListener) throws Exception
	{
		this.locListener = locListener;
		locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
		// Quiero ver si el GPS está habilitado en el dispositivo
		if (locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
		{
		    //Nos registramos para recibir actualizaciones de la posición
		    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,(android.location.LocationListener)this.locListener);
		}
		else
		{
			 throw new Exception("El GPS NO ESTÁ HABILITADO");
		}
	}
	
	public GeoPoint getLastPosition()
	{
		if (locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
		{
			//Obtenemos la última posición conocida
		    Location loc =  locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		    if(loc!=null)
		    {
		    	return new GeoPoint((int) (loc.getLatitude() * 1E6), (int) (loc.getLongitude() * 1E6));
		    }
		}
		return new GeoPoint((int) (Double.parseDouble("-31.419936007") * 1E6), (int) (Double.parseDouble("-64.18863587") * 1E6));
	}
	
	public void stopListening()
	{
		if(locManager != null)
	    {
			locManager.removeUpdates((android.location.LocationListener) locListener);
	    }
	}

	
}
